package isg.etsii.ull.es;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;


public class PropiedadesDAO {
	Connection conn = null;

	public PropiedadesDAO() throws ClassNotFoundException, SQLException {
		Class.forName("org.postgresql.Driver");
	
		// Localhost
		
		/*String url = "jdbc:postgresql://localhost:5432";
		String usuario = "postgres";
		String clave = "mederos";*/
		
		String url = "jdbc:postgresql://localhost:5432";
		String usuario = "postgres";
		String clave = "varela";
		
		// Para el cc
		/*
		String url = "jdbc:postgresql://banot.etsii.ull.es/isg0910e6";
		String usuario = "isg0910e6";
		String clave = "4PA9fC";
		*/
		conn = DriverManager.getConnection(url, usuario, clave);
	}

	// Insertar una nueva propiedad en la base de datos

	public int nuevo(Propiedad prop) throws SQLException {
		int count = 0;
		
		Statement st = conn.createStatement();
	    ResultSet rs = st.executeQuery("SELECT COUNT(*) FROM PROPIEDADES");
		
	    while (rs.next()) {
	    	count = rs.getInt(1);
	    }
		
		String sql = "INSERT INTO PROPIEDADES (ID, TIPO, DNI, DIRECCION, PRECIO) VALUES (?,?,?,?,?)";
		
		PreparedStatement stm = conn.prepareStatement(sql);
		
		stm.setInt(1, count + 1);
		stm.setString(2, prop.getTipoProp());
		stm.setString(3, prop.getDni());
		stm.setString(4, prop.getDireccion());
		stm.setFloat(5, prop.getPrecio());

		int i = stm.executeUpdate();
		
		// try catch si falla IMPORTANTE
		
		return i; // indica el número de registros insertados
	}
	

	// Listar todos los usuarios de la base de datos

	public ArrayList<Propiedad> listarTodos(String dni) throws SQLException {
	String sql = "SELECT * FROM PROPIEDADES WHERE DNI = '" + dni + "';";

	Statement stm = conn.createStatement();

	ResultSet rs = stm.executeQuery(sql);

	ArrayList<Propiedad> listaPropiedades = new ArrayList<Propiedad>();

	while (rs.next()) {

	Propiedad p = new Propiedad();

	p.setTipoProp(rs.getString("TIPO"));

	p.setDni(rs.getString("DNI"));

	p.setDireccion(rs.getString("DIRECCION"));

	p.setPrecio(rs.getFloat("PRECIO"));

	listaPropiedades.add(p);

	}

	return listaPropiedades;

	}
	
	public ArrayList<Propiedad> listartipo(String tipo) throws SQLException {
		String sql = "SELECT * FROM PROPIEDADES WHERE TIPO = '" + tipo + "';";

		Statement stm = conn.createStatement();

		ResultSet rs = stm.executeQuery(sql);

		ArrayList<Propiedad> listaPropiedades = new ArrayList<Propiedad>();

		while (rs.next()) {

		Propiedad p = new Propiedad();

		p.setTipoProp(rs.getString("TIPO"));

		p.setDni(rs.getString("DNI"));

		p.setDireccion(rs.getString("DIRECCION"));

		p.setPrecio(rs.getFloat("PRECIO"));

		listaPropiedades.add(p);

		}

		return listaPropiedades;

		}
	
	public ArrayList<Propiedad> listarPrecio(float precio) throws SQLException {
		String sql = "SELECT * FROM PROPIEDADES WHERE PRECIO <= " + precio + ";";

		Statement stm = conn.createStatement();

		ResultSet rs = stm.executeQuery(sql);

		ArrayList<Propiedad> listaPropiedades = new ArrayList<Propiedad>();

		while (rs.next()) {

			Propiedad p = new Propiedad();

			p.setTipoProp(rs.getString("TIPO"));

			p.setDni(rs.getString("DNI"));

			p.setDireccion(rs.getString("DIRECCION"));

			p.setPrecio(rs.getFloat("PRECIO"));

			listaPropiedades.add(p);

		}

		return listaPropiedades;

		}
/*
	// borrar un Usuario Registrado de la base de datos

	public int borrar(int dni) throws SQLException {

	String sql = "DELETE FROM CLIENTES WHERE ID = ?";

	PreparedStatement stm = conn.prepareStatement(sql);

	stm.setInt(1, dni);

	int i = stm.executeUpdate();

	return i;

	}

	// modificar un Usuario Registrado de la base de datos

	public int actualizar(String usuario, String clave, String dni) throws SQLException {

	String sql = "UPDATE USUARIOREGISTRADO SET CLAVE = ? WHERE DNI = ?";

	PreparedStatement stm = conn.prepareStatement(sql);

	stm.setString(1, clave);

	stm.setString(2, dni);

	int i = stm.executeUpdate();

	return i;

	}
*/
}


